Linux Logical Volume Manager, LVM

표준 파티션을 사용하여 파일 시스템을 만들 때, 파티션 확장은 사용 가능한 공간의 범위까지로 제한된다.
(새로운 더 큰 하드 드라이브를 구해서 수동으로 새 드라이브에 기존의 파일 시스템을 복사해야 함)

다른 하드 드라이브 파티션을 기존의 파일 시스템에 추가해서 기존의 파일시스템에 동적으로 더 많은 공간을
추가하는 방법을 사용할 수 있다.

Linux Logical Volume Manager, LVM
LVM은 파일 전체 시스템을 재구축 할 필요 없이 리눅스 시스템의 디스크 공간을 조작할 수 있는 쉬운 방법을 제공한다.
PV(Physical Volume): 물리적 볼륨으로 하드 드라이브에 만들어지는 특정한 물리적 파티션에 매핑된다.
VG(Volume Group): PV를 이루는 요소로 논리 볼륨 관리 시스템에서 논리적으로 파티션을 만들 수 있는 플랫폼 제공
LV(Logical Volume): LV는 리눅스에서 파일 시스템을 만들기 위한 파티션 환경을 만들며, 실제 하드 디스크의 파티션과 유사하게 동작
리눅스 LVM (Logical Volume Management, 논리 볼륨 관리)
- LVM1: 1998년 개발된 최초의 LVM 패키지로 2.4 리눅스 커널에서만 사용 가능, 기본적인 논리 볼륨 관리 기능만 제공
- LVM2: 2.6 리눅스 커널에서 사용할 수 있는 LVM의 업데이트 버전, 표준 LVM1 기능에 추가 기능 제공
SnapShot
리눅스 LVM은 논리 볼륨이 활성화되어 있는 동안 다른 장치에 기존 논리 볼륨을 복사할 수 있다.(Copy and Write)
해당 기능을 스냅샷이라고 하며, 스냅샷은 고가용성을 필요로하기 때문에 잠글 수 없는 중요한 데이터 백업 수단으로 사용된다.
(전통적인 백업 방법은 백업 매체에 복사할 때 파일을 잠근다. 복사를 수행하는 동알 웹 서버 또는 데이터베이스 서버를 계속 수행할 수 없음)

LVM1은 읽기 전용 스냅 샷만 만들 수 있으며, LVM2는 읽기 및 쓰기 스냅샷을 만들 수 있다.
(스냅샷을 이용하면, 원래의 논리 볼륨 대신 스냅샷을 마운트 하는 것도 가능하다
빠른 fail-over 또는 데이터를 변경하는 응용 프로그램을 복원하는데 사용된다.)
Striping
LVM2는 스트라이핑 기능을 제공한다.
하나의 논리 볼륨을 여러개의 물리적 하드 드라이브에 걸쳐 만들 수 있다.
(논리 볼륨에 파일을 기록할 때 파일의 데이터 블록은 여러 하드 드라이버에 걸쳐 분산된다.
각각의 연속된 데이터(논리적으로) 블록이 하드 드라이브에서 분산되기 때문에 읽기/쓰기 헤드를 옮기는 시간을 기다릴 필요가 없으며,
도이에 여러 개의 하드 드라이브에서 데이터를 읽을 수 있다.)
Mirroring
스냅샷을 통해 문제를 복구할 수 있는 방법을 제공하지만, 데이터베이스 서버와 같이 데이터 변경이 많은 시스템의 경우
마지막 스냅샷 이후, 기록의 수백 또는 수천 개의 레코드를 저장했을 수도 있다.

LVM 미러는 실시간으로 업데이트 되는 논리 볼륨의 완전한 사본이다.
최초의 동기화 완료된 후, LVM은 파일시스템에서 쓰기 작업을 할 때마다 두 번 쓰기 작업을 수행한다.(메인 LV+복사 LV)
LLVM in Linux(Linux LVM package)
- 물리 볼륨 정의하기
물리적 파티션을 리눅스 LVM이 사용하는 물리 볼륨 익스텐트로 변환
fdisk
t 명령을 통해 파티션 유형을 변경
83: 직접 파일 시스템
8e: 리눅스 LVM 시스템

물리 볼륨(PV) 생성
sudo pvcreate <device node> # PV
sudo pvdisplay <device node> # PV
- 볼륨 그룹 만들기
물리 볼륨으로부터 하나 이상의 볼륨 그룹(VG)를 만든다.
sudo vgcreate <VG NAME> <PV NAME> # VG
sudo vgdisplay <VG NAME> # VG
- 논리 볼륨 만들기
물리적 파티션을 에뮬레이트 하기 위해 사용하며, 파일시스템을 보유한다.
LV을 물리적 파티션 처럼 다루며, 논리 볼륨에 파일시스템을 정의한 다음 가상 디렉토리에 파일시스템을 마운트할 수 있다.

lvcreate는 위의 pvcreate, vgcreate와 달리 옵션을 필수적으로 사용해야 한다.

options
-l: 새로운 논리 볼륨에 할당할 논리 익스텐트의 수 또는 사용할 논리 익스텐트의 비율
-n: 새로운 논리 볼륨(LV)의 이름
sudo lvcreate -l 100%FREE -n <LV NAME> <VG NAME>
sudo lvdisplay <VG NAME>
/dev/<VG NAME>/<LV NAME>
위와 같이 생성된 볼륨은 논리 볼륨이 존재하지만, 파일 시스템이 없다.
sudo mkfs.ext4 /dev/<VG NAME>/<LV NAME>
sudo mount /dev/<VG NAME>/<LV NAME> /mnt/<NEW MNT POINT>
리눅스 LVM 사용할 때 동적우로 파일 시스템을 수정하는 것이 가능하다
- vgchange: 볼륨 그룹 활성화/비활성화
- vgremove: 볼륨 그룹을 제거
- vgextend: 볼륨 그룹에 물리 볼륨을 추가
- vgreduce: 볼륨 그룹에 물리 볼륨을 제거
- lvextend: 논리 볼륨의 크리를 늘린다.
- lvreduce: 논리 볼륨의 크기를 줄인다.

논리 볼륨의 크기를 변경시킬 때, 논리 볼륨에 저장되어 있는 파일 시스템도 크기 변화에 대응하여 수정되어야 한다.
ext2, ext3, ext4 파일 시스템에서는 resize2fs 프로그램을 이용할 수 있다.